递归算法的一些实例
递归算法实际上只需要找出递归表达式,或者说是n与n-1之间的关系即可,由于是直接调用自身,所以使用递归解决问题的函数通常都是很短的,因为只需要描述n与n-1之间的关系,以及终止递归的条件。
(1)阶乘
比如一个最简单的递归例子,求n的阶乘,递归的过程就是n*(n-1),终止的条件就是n=1,所以这个子函数就可以写成:
unsigned fac(unsigned n)
{
unsigned f;
if (n==0)
f = 1;
else
f = fac(n-1)*n;
return f;
}
(2)排列组合
并非只有存在数学表达式的例子才能用递归的思想,只要能找出n和n-1的关系即可,比如说求n个人里面选k个人的组合数,已知如下关系:
由n选k个的组合数 = 由n-1选k个的组合数 + 由n-1选k-1的组合数
那么递归的表达式就可以写成:
f(n,k) = f(n-1,k) + f(n-1.k-1);
子函数可以写成:
int comm(int n,int k)
{
if(n < k)
return 0;
else if(n == k || k